package net.linku.utils;


import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Set;

/**
 * @ClassName TimeZoneUtil
 * @Description: 时区工具类
 * @Author SilenceTian
 * @Date 2024/1/2
 * @Version V1.0.2
 **/
public class TimeZoneUtil {

    /**
     * 获取默认时区
     *
     * @return 默认时区
     */
    public static ZoneId getDefaultTimeZone() {
        return ZoneId.systemDefault();
    }

    /**
     * 获取所有可用时区
     *
     * @return 所有可用时区
     */
    public static Set<String> getAllTimeZones() {
        return ZoneId.getAvailableZoneIds();
    }

    /**
     * 获取指定时区
     *
     * @param timeZoneId 时区ID
     * @return 指定时区
     */
    public static ZoneId getTimeZoneById(String timeZoneId) {
        return ZoneId.of(timeZoneId);
    }

    /**
     * 获取当前时间在指定时区的日期时间
     *
     * @param timeZone 时区
     * @return 当前时间在指定时区的日期时间
     */
    public static ZonedDateTime getCurrentDateTimeInTimeZone(ZoneId timeZone) {
        return ZonedDateTime.now(timeZone);
    }

    public static void main(String[] args) {
        // 获取默认时区
        ZoneId defaultTimeZone = getDefaultTimeZone();
        System.out.println("Default Time Zone: " + defaultTimeZone);

        // 获取所有可用时区
        Set<String> availableTimeZones = getAllTimeZones();
        System.out.println("Available Time Zones:");
        for (String timeZone : availableTimeZones) {
            System.out.println(timeZone);
        }

        // 获取指定时区
        String specificTimeZoneId = "Asia/Shanghai";
        ZoneId specificTimeZone = getTimeZoneById(specificTimeZoneId);
        System.out.println("Specific Time Zone: " + specificTimeZone);

        // 获取当前时间在指定时区的日期时间
        ZonedDateTime currentDateTimeInSpecificTimeZone = getCurrentDateTimeInTimeZone(specificTimeZone);
        System.out.println("Current Date Time in Specific Time Zone: " + currentDateTimeInSpecificTimeZone);
    }
}

